R은 파이썬, 자바, C 등과 달리 시작 인덱스가 1이다.
1. Vector(벡터)
벡터는 타입이 같은 여러 데이터를 하나의 행으로 저장하는 1차원 데이터 구조이다.
concatenate(연결)의 c를 통해서 데이터를 묶을 수 있다.
> v4<-c(3, TRUE, FALSE)
> v4
[1] 3 1 0
> v5<-c('a', 1, TRUE)
> v5
[1] "a" "1" "TRUE"
벡터를 생성할 때 c 안에 콤마를 구분자로 써서 성분을 직접 입력할 수 있다.
콜론(:)을 이용해서 시작값과 끝값을 지정해 벡터를 생성할 수도 있다.
> v1<-c(1:6)
> v1
[1] 1 2 3 4 5 6
2. Matrix(행렬)
행렬은 2차원 구조를 가진 벡터이다.(모든 데이터는 같은 타입, 타입이 다른 경우 자동으로 타입 변환)
matrix를 사용하여 행렬을 만들 때, nrow와 ncol을 지정해서 행렬의 행, 열의 수를 결정할 수 있다.
> m1<-matrix(c(1:6), nrow=2)
> m1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> m2<-matrix(c(1:6), ncol=2)
> m2
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
matrix를 사용해서 행렬을 만들 경우 행렬의 값들이 열로 저장된다.
byrow 옵션에 T(TRUE)를 지정하면, 행으로 저장된다.)
> m3<-matrix(c(1:6), nrow=2, byrow=T)
> m3
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
dim() 함수을 이용해서 벡터에 차원을 전달해서 행렬을 만들 수 있다.
> v1=c(1:6)
> v1
[1] 1 2 3 4 5 6
> dim(v1)<-c(2, 3)
> v1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
3. Array(배열)
3차원 이상의 벡터를 배열이라고 한다.(모든 같은 타입으로 구성)
array를 통해서 배열을 만들 수 있으나, 차원의 구조를 나타내는 dim 옵션을 명시해야 한다.
> a1<-array(c(1:12), dim=c(2, 3 ,2))
> a1
, , 1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
, , 2
[,1] [,2] [,3]
[1,] 7 9 11
[2,] 8 10 12
dim() 함수를 이용해서 벡터에 차원을 지정해 배열을 만들 수 있다.
> a2<-c(1:12)
> dim(a2)<-c(2, 3, 2)
4. List(리스트)
리스트는 데이터 타입, 데이터 구조에 관계없이 사용자가 원하는 모든 것을 저장할 수 있는 자료구조이다.
list()를 이용해서 리스트를 만들 수 있다.
> L<-list()
> L[[1]]<-5
> L[[2]]<-c(1:6)
> L[[3]]<-matrix(c(1:6), nrow=2)
> L[[4]]<-array(c(1:12), dim=c(2, 3, 2))
> L
[[1]]
[1] 5
[[2]]
[1] 1 2 3 4 5 6
[[3]]
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
[[4]]
, , 1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
, , 2
[,1] [,2] [,3]
[1,] 7 9 11
[2,] 8 10 12
5. 데이터프레임
데이터프레임은 데이터 분석을 위한 2차원 구조를 갖는
관계형 데이터 구조이다.
행렬과 같은 모양을 갖지만, 여러개의 벡터로 구성되어 있기 때문에, 각 열은 서로 다른 타입의 데이터를 가질 수 있다.
> v1<-c(1, 2, 3)
> v2<-c('a', 'b', 'c')
> df1<-data.frame(v1, v2)
> df1
v1 v2
1 1 a
2 2 b
3 3 c